---
order: 3
title: 资产的释放
type: 资产工作流
label: Resource
---

为了避免重复加载资源，当资源被加载完成之后，会被缓存在 _ResourceManager_ 内。缓存本身会占用内存和显存，当开发者不再需要缓存的内容时，需要手动去释放缓存的内容。

> 注意：资源之间是相互依赖的。

例如下图展示的实体包含 [MeshRenderer](/apis/core/#MeshRenderer) 组件，依赖于 [Material](/apis/core/#Material)， _Material_ 可能被多个 _MeshRenderer_ 引用，如果释放 _Material_ ，那么引用此的其他 _MeshRenderer_ 则会找不到该 _Material_ 而报错。

<Image src="https://gw.alipayobjects.com/mdn/mybank_yulibao/afts/img/A*wXmqRIwqI18AAAAAAAAAAAAAARQnAQ" />

> 注意：JavaScript 无法追踪对象的引用。 一般在 JavaScript 等弱类型语言中，是没有提供给开发者内存管理的功能的，所有对象的内存都是通过垃圾回收机制来管理，你没有办法去判断对象什么时候会被释放，所以没有[析构函数(destructor)](https://zh.wikipedia.org/wiki/%E8%A7%A3%E6%A7%8B%E5%AD%90)去调用引用资源的释放。

`ResourceManager` 提供了一套基于引用计数的资源释放，需要开发者手动调用 [gc](/apis/core/#ResourceManager-gc)：

```typescript
engine.resourceManager.gc();
```
